package ocio.actions;

import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import ocio.beans.Oferta;
import ocio.beans.Producto;
import ocio.services.OfertaService;
import ocio.services.ProductoService;
import ocio.services.ServiceLocator;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de la petición de información detallada sobre un producto y
 * de la de realizar una reserva sobre alguna de sus Ofertas.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Producto
 * @see ocio.beans.Oferta
 * @see ocio.beans.Reserva
 */
public class DetalleProductoReservaAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private int idProducto;		// id del usuario del que hay que listar los productos
	private Producto producto;
	private Oferta oferta;
	private Set<Oferta> listaOfertas;
	private int idOferta;
	private String msg="";
	
    /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Si la petición es de información detallada de un producto y sus ofertas solicita los servicios
	 * para recuperar esa información. Si la petición es de reserva sobre una oferta,
	 * solicita los servicios para recuperar la información detallada de la oferta.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario
	 */	
	public String execute(){
		// Poblar producto y lista de ofertas asociadas al producto.
	
		String resultado = "success";
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		
		ProductoService prodS = (ProductoService)serviceLocator.getService("Producto");
		OfertaService oferS = (OfertaService)serviceLocator.getService("Oferta");
			
		if (idProducto!=0){
			producto = (Producto)prodS.searchById(idProducto);
			listaOfertas = new HashSet<Oferta>();
			
			// Solo se muestran las ofertas vigentes
			Iterator<Oferta> itr = producto.getOfertas().iterator();
			while (itr.hasNext()){
				Oferta oferta =(Oferta)itr.next();
				if (oferta.getFechaLim().after(new Date())){
					listaOfertas.add(oferta);
				}
			}
			
		} else {
			//Se ha dado a reservar
				oferta = (Oferta)oferS.searchById(idOferta);
				producto = oferta.getProducto();
 		}
		
		return resultado;
	}



	public Producto getProducto() {
		return producto;
	}


	public void setProducto(Producto producto) {
		this.producto = producto;
	}


	public int getIdProducto() {
		return idProducto;
	}


	public void setIdProducto(int idProducto) {
		this.idProducto = idProducto;
	}


	public Set<Oferta> getListaOfertas() {
		return listaOfertas;
	}


	public void setListaOfertas(Set<Oferta> listaOfertas) {
		this.listaOfertas = listaOfertas;
	}



	public Oferta getOferta() {
		return oferta;
	}



	public void setOferta(Oferta oferta) {
		this.oferta = oferta;
	}



	public int getIdOferta() {
		return idOferta;
	}



	public void setIdOferta(int idOferta) {
		this.idOferta = idOferta;
	}



	public String getMsg() {
		return msg;
	}



	public void setMsg(String msg) {
		this.msg = msg;
	}
		
}
